package com.gitee.sparta.annotation;

import java.lang.annotation.*;

/**
 * <p>
 *      该注解是用于标注最终通知的注解
 * <p>
 *      何为最终通知？
 *      答：当一个消息过期后，会主动调用用户标注 @SpartaListener 的方法，但是该方法并非 sparta 作者
 *      能够控制的，也就是有可能会出现错误的情况。一旦出现错误，就会触发系统的重试机制。但是重试的次数
 *      并非是无限制次数的重试，所以 sparta 提供了一种兜底的解决方案。当重试次数超过了用户设定的重试
 *      次数或者默认重试次数上限时，系统最终会调用有该注解 @FinalRetry 的方法
 * <p>
 *      !@FinalRetry(topics={"topic1", "topic2"})
 *      public void finalRetry (String topic, Object body) {
 *          // .... doNothing ...
 *      }
 * </p>
 *
 * @author zyred
 * @since v 0.0.1
 **/
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FinalRetry {

    /**
     * 描述该最终通知的方法所接收来远的 topic
     *
     * @return      [topic1, topic2, .....]
     */
    String[] topics();

}
